package com.剑指offer.第一章;


/**
 * 考虑边界 整数 -2^31~~~2^31-1
 * <p>
 * 出现超过边界值的情况就是 (-2^31)*(-1)  这种情况直接返回最大值
 * <p>
 * 针对负数，先将负数转成整数
 */
public class 整数除法 {

    public static int divideBefore(int dividend, int divisor) {

        if (dividend == Integer.MIN_VALUE && divisor == -1) {
            return Integer.MAX_VALUE;
        }

        int negative = 2;
        if (dividend > 0) {
            negative--;
            dividend = -dividend;
        }

        if (divisor > 0) {
            negative--;
            divisor = -divisor;
        }

        int result = divideCore(dividend, divisor);
        return negative == 1 ? -result : result;
    }

    /**
     * @param dividend 被除数
     * @param divisor  除数
     */
    public static int divideCore(int dividend, int divisor) {
        int result = 0;
        while (dividend <= divisor) {
            int value = divisor;
            int zhishu = 1;
            // 当除数 与 被除数都是 -2^31时，相加会出现溢出 0xc0000000 是-2^30
            while (value >= 0xc0000000 && dividend <= value + value) {
                zhishu += zhishu;
                value += value;
            }
            result += zhishu;
            dividend -= value;
        }
        return result;
    }

    public static void main(String[] args) {
//        System.out.println(divideBefore(15, 2));
        System.out.println(Integer.parseInt("10",2));
    }


}
